D:\a\scloud-dns\scloud-dns\src\exceptions\mod.rs
Line | Count | Source |
1 | | use strum_macros::EnumIter; |
2 | | |
3 | | mod tests; |
4 | | |
5 | | #[allow(non_camel_case_types)] |
6 | | #[derive(Debug, PartialEq, EnumIter, Clone)] |
7 | | pub enum SCloudException { |
8 | | // HEADER SECTION |
9 | | SCLOUD_HEADER_DESERIALIZATION_FAILED, |
10 | | SCLOUD_HEADER_BYTES_EMPTY, |
11 | | |
12 | | // QUESTION SECTION |
13 | | SCLOUD_QUESTION_DESERIALIZATION_FAILED, |
14 | | SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG, |
15 | | |
16 | | // ANSWER SECTION |
17 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED, |
18 | | SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG, |
19 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT, |
20 | | SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS, |
21 | | |
22 | | // AUTHORITY SECTION |
23 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS, |
24 | | SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT, |
25 | | |
26 | | // ADDITIONAL SECTION |
27 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED, |
28 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT, |
29 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG, |
30 | | SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS, |
31 | | |
32 | | // QNAME |
33 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME, |
34 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF, |
35 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF, |
36 | | SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED, |
37 | | |
38 | | // QTYPE |
39 | | SCLOUD_QTYPE_UNKNOWN_TYPE, |
40 | | |
41 | | //QCLASS |
42 | | SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN, |
43 | | SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN, |
44 | | |
45 | | // STUB RESOLVER |
46 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_ID, |
47 | | SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE, |
48 | | SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET, |
49 | | SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT, |
50 | | SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET, |
51 | | SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET, |
52 | | |
53 | | // RESOLVER |
54 | | SCLOUD_RESOLVER_ANSWER_MISMATCH, |
55 | | SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE, |
56 | | |
57 | | // ZONES |
58 | | SCLOUD_ZONE_PARSER_FILE_NOT_FOUND, |
59 | | SCLOUD_ZONE_PARSER_FILE_EMPTY, |
60 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE, |
61 | | SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD, |
62 | | |
63 | | // CONFIG |
64 | | SCLOUD_CONFIG_FILE_NOT_FOUND, |
65 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON, |
66 | | SCLOUD_CONFIG_MISSING_FORWARDER, |
67 | | SCLOUD_CONFIG_MISSING_ADDRESS, |
68 | | SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR, |
69 | | SCLOUD_CONFIG_INVALID_SERVER_PORT, |
70 | | SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD, |
71 | | SCLOUD_CONFIG_INVALID_DNS_LIMITS, |
72 | | SCLOUD_CONFIG_INVALID_LISTENER, |
73 | | SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME, |
74 | | SCLOUD_CONFIG_INVALID_LISTENER_PORT, |
75 | | SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS, |
76 | | SCLOUD_CONFIG_TLS_MISSING_CERT, |
77 | | SCLOUD_CONFIG_TLS_MISSING_KEY, |
78 | | SCLOUD_CONFIG_TLS_REQUIRES_TCP, |
79 | | SCLOUD_CONFIG_INVALID_DOH, |
80 | | SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE, |
81 | | SCLOUD_CONFIG_INVALID_FORWARDER, |
82 | | SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME, |
83 | | SCLOUD_CONFIG_INVALID_ZONE, |
84 | | SCLOUD_CONFIG_DUPLICATE_ZONE_NAME, |
85 | | SCLOUD_CONFIG_ZONE_MISSING_FILE, |
86 | | SCLOUD_CONFIG_SLAVE_MISSING_MASTERS, |
87 | | SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS, |
88 | | SCLOUD_CONFIG_INVALID_INLINE_ZONE, |
89 | | SCLOUD_CONFIG_UNKNOWN_TSIG_KEY, |
90 | | SCLOUD_CONFIG_MX_MISSING_PRIORITY, |
91 | | SCLOUD_CONFIG_PRIORITY_ON_NON_MX, |
92 | | SCLOUD_CONFIG_INVALID_VIEW, |
93 | | SCLOUD_CONFIG_DUPLICATE_VIEW_NAME, |
94 | | SCLOUD_CONFIG_INVALID_DYNUPDATE, |
95 | | SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE, |
96 | | } |
97 | | |
98 | | impl SCloudException { |
99 | | #[allow(unused)] |
100 | 130 | pub(crate) fn to_str(&self) -> &'static str { |
101 | 130 | match self { |
102 | | //HEADER SECTION |
103 | | SCloudException::SCLOUD_HEADER_DESERIALIZATION_FAILED => { |
104 | 2 | "[HEADER_SECTION] Buffer length is less than header length." |
105 | | } |
106 | | |
107 | 2 | SCloudException::SCLOUD_HEADER_BYTES_EMPTY => "[HEADER_SECTION] The header is empty.", |
108 | | |
109 | | // QUESTION SECTION |
110 | | SCloudException::SCLOUD_QUESTION_DESERIALIZATION_FAILED => { |
111 | 2 | "[QUESTION_SECTION] Buffer length is less than question section length." |
112 | | } |
113 | | SCloudException::SCLOUD_QUESTION_SERIALIZATION_FAILED_QNAME_TOO_LONG => { |
114 | 2 | "[QUESTION_SECTION] `q_name` too long." |
115 | | } |
116 | | |
117 | | // ANSWER SECTION |
118 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED => { |
119 | 2 | "[ANSWER_SECTION] Buffer length is less than answer section length." |
120 | | } |
121 | | SCloudException::SCLOUD_ANSWER_DESERIALIZATION_FAILED_LABEL_TOO_LONG => { |
122 | 2 | "[ANSWER_SECTION] Label too long for DNS." |
123 | | } |
124 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_HEADER_TOO_SHORT => { |
125 | 2 | "[ANSWER_SECTION] Failed to parse DNS answer section: not enough bytes for TYPE, CLASS, TTL, and RDLENGTH." |
126 | | } |
127 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_ANSWER_RDATA_OUT_OF_BOUNDS => { |
128 | 2 | "[ANSWER_SECTION] Failed to parse DNS answer section: RDLENGTH exceeds remaining buffer size." |
129 | | } |
130 | | |
131 | | // AUTHORITY SECTION |
132 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
133 | 2 | "[AUTHORITY_SECTION] Buffer length is less than authority section length." |
134 | | } |
135 | | SCloudException::SCLOUD_AUTHORITY_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
136 | 2 | "[AUTHORITY_SECTION] Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
137 | | } |
138 | | |
139 | | // ADDITIONAL SECTION |
140 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED => { |
141 | 2 | "[ADDITIONAL_SECTION] Buffer length is less than additional section length." |
142 | | } |
143 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_BUF_TOO_SHORT => { |
144 | 2 | "[ADDITIONAL_SECTION] Impossible to deserialize, `buf.len()` is lower than `pos+10`. (buf too short)" |
145 | | } |
146 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_QNAME_TOO_LONG => { |
147 | 2 | "[ADDITIONAL_SECTION] `q_name` too long." |
148 | | } |
149 | | SCloudException::SCLOUD_ADDITIONAL_DESERIALIZATION_FAILED_RDATA_OUT_OF_BOUNDS => { |
150 | 2 | "[ADDITIONAL_SECTION] Buffer length is less than authority section length." |
151 | | } |
152 | | |
153 | | // QNAME |
154 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME => { |
155 | 2 | "[QNAME] Impossible to parse the `q_name`, check if a `q_name` is provided." |
156 | | } |
157 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_GREATER_THAN_BUF => { |
158 | 2 | "[QNAME] Impossible to parse the `q_name`, pos is greater than buffer length." |
159 | | } |
160 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_POS_AND_LEN_GREATER_THAN_BUF => { |
161 | 2 | "[QNAME] Impossible to parse the `q_name`, pos and len are greater than buffer length." |
162 | | } |
163 | | SCloudException::SCLOUD_IMPOSSIBLE_PARSE_QNAME_COMPRESSION_FAILED => { |
164 | 2 | "[QNAME] Impossible to parse the `q_name`, compression 0xC0xx failed." |
165 | | } |
166 | | |
167 | | // QTYPE |
168 | 2 | SCloudException::SCLOUD_QTYPE_UNKNOWN_TYPE => "[QTYPE] Unknown `q_type`.", |
169 | | |
170 | | //QCLASS |
171 | | SCloudException::SCLOUD_QCLASS_U16_FOR_DNSCLASS_UNKNOWN => { |
172 | 2 | "[QCLASS] Unknown `q_class`." |
173 | | } |
174 | | SCloudException::SCLOUD_QCLASS_DNSCLASS_FOR_U16_UNKNOWN => { |
175 | 2 | "[QCLASS] Unknown `q_class`." |
176 | | } |
177 | | |
178 | | // STUB RESOLVER |
179 | | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_ID => { |
180 | 2 | "[STUB_RESOLVER] Invalid DNS ID (difference between `response.header.id` and `request_id`)." |
181 | | } |
182 | | SCloudException::SCLOUD_STUB_RESOLVER_INVALID_DNS_RESPONSE => { |
183 | 2 | "[STUB_RESOLVER] Invalid DNS response." |
184 | | } |
185 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_CREATE_SOCKET => { |
186 | 2 | "[STUB_RESOLVER] Failed to create UDP socket." |
187 | | } |
188 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_READ_SOCKET_TIMEOUT => { |
189 | 2 | "[STUB_RESOLVER] Failed to read, socket timeout." |
190 | | } |
191 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_SEND_TO_SOCKET => { |
192 | 2 | "[STUB_RESOLVER] Failed to send to socket." |
193 | | } |
194 | | SCloudException::SCLOUD_STUB_RESOLVER_FAILED_TO_RECV_FROM_SOCKET => { |
195 | 2 | "[STUB_RESOLVER] Failed to receive from socket." |
196 | | } |
197 | | |
198 | | // RESOLVER |
199 | | SCloudException::SCLOUD_RESOLVER_ANSWER_MISMATCH => { |
200 | 2 | "[RESOLVER] DNS response failed validation against the original query." |
201 | | } |
202 | 2 | SCloudException::SCLOUD_RESOLVER_RECORD_OUT_OF_ZONE => "[RESOLVER] Record out of zone.", |
203 | | |
204 | | // ZONES |
205 | | SCloudException::SCLOUD_ZONE_PARSER_FILE_NOT_FOUND => { |
206 | 2 | "[ZONE_PARSER] Zone file not found." |
207 | | } |
208 | 2 | SCloudException::SCLOUD_ZONE_PARSER_FILE_EMPTY => "[ZONE_PARSER] Zone file is empty.", |
209 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_ZONE_FILE => { |
210 | 2 | "[ZONE_PARSER] `zone_parser()` failed to read the zone file." |
211 | | } |
212 | | SCloudException::SCLOUD_ZONE_PARSER_FAILED_TO_READ_TTL_FIELD => { |
213 | 2 | "[ZONE_PARSER] `zone_parser()` detect TTL field but failed to read this field." |
214 | | } |
215 | | |
216 | | //CONFIG |
217 | | SCloudException::SCLOUD_CONFIG_FILE_NOT_FOUND => { |
218 | 2 | "[SCLOUD_CONFIG] Configuration file not found." |
219 | | } |
220 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_JSON => { |
221 | 2 | "[SCLOUD_CONFIG] Error while parsing the JSON file." |
222 | | } |
223 | | SCloudException::SCLOUD_CONFIG_MISSING_FORWARDER => { |
224 | 2 | "[SCLOUD_CONFIG] Missing forwarder." |
225 | | } |
226 | 2 | SCloudException::SCLOUD_CONFIG_MISSING_ADDRESS => "[SCLOUD_CONFIG] Missing address.", |
227 | | SCloudException::SCLOUD_CONFIG_IMPOSSIBLE_TO_PARSE_ADDR => { |
228 | 2 | "[SCLOUD_CONFIG] Error while parsing the IP address." |
229 | | } |
230 | | SCloudException::SCLOUD_CONFIG_INVALID_SERVER_PORT => { |
231 | 2 | "[SCLOUD_CONFIG] Invalid server port (must be between 1 and 65535)." |
232 | | } |
233 | | |
234 | | SCloudException::SCLOUD_CONFIG_INVALID_MAX_UDP_PAYLOAD => { |
235 | 2 | "[SCLOUD_CONFIG] Invalid max UDP payload size." |
236 | | } |
237 | | |
238 | | SCloudException::SCLOUD_CONFIG_INVALID_DNS_LIMITS => { |
239 | 2 | "[SCLOUD_CONFIG] Invalid DNS limits (label length, domain length, or packet size)." |
240 | | } |
241 | | |
242 | | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER => { |
243 | 2 | "[SCLOUD_CONFIG] Invalid listener configuration." |
244 | | } |
245 | | |
246 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_LISTENER_NAME => { |
247 | 2 | "[SCLOUD_CONFIG] Duplicate listener name detected." |
248 | | } |
249 | | |
250 | | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PORT => { |
251 | 2 | "[SCLOUD_CONFIG] Invalid listener port." |
252 | | } |
253 | | |
254 | | SCloudException::SCLOUD_CONFIG_INVALID_LISTENER_PROTOCOLS => { |
255 | 2 | "[SCLOUD_CONFIG] Listener has no valid protocol defined." |
256 | | } |
257 | | |
258 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_CERT => { |
259 | 2 | "[SCLOUD_CONFIG] TLS enabled but certificate path is missing." |
260 | | } |
261 | | |
262 | | SCloudException::SCLOUD_CONFIG_TLS_MISSING_KEY => { |
263 | 2 | "[SCLOUD_CONFIG] TLS enabled but private key path is missing." |
264 | | } |
265 | | |
266 | | SCloudException::SCLOUD_CONFIG_TLS_REQUIRES_TCP => { |
267 | 2 | "[SCLOUD_CONFIG] TLS listeners require TCP support." |
268 | | } |
269 | | |
270 | | SCloudException::SCLOUD_CONFIG_INVALID_DOH => { |
271 | 2 | "[SCLOUD_CONFIG] Invalid DNS-over-HTTPS (DoH) configuration." |
272 | | } |
273 | | |
274 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_ACL_REFERENCE => { |
275 | 2 | "[SCLOUD_CONFIG] Unknown or invalid ACL reference." |
276 | | } |
277 | | |
278 | | SCloudException::SCLOUD_CONFIG_INVALID_FORWARDER => { |
279 | 2 | "[SCLOUD_CONFIG] Invalid forwarder configuration." |
280 | | } |
281 | | |
282 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_FORWARDER_NAME => { |
283 | 2 | "[SCLOUD_CONFIG] Duplicate forwarder name detected." |
284 | | } |
285 | | |
286 | | SCloudException::SCLOUD_CONFIG_INVALID_ZONE => { |
287 | 2 | "[SCLOUD_CONFIG] Invalid DNS zone configuration." |
288 | | } |
289 | | |
290 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_ZONE_NAME => { |
291 | 2 | "[SCLOUD_CONFIG] Duplicate zone name detected." |
292 | | } |
293 | | |
294 | | SCloudException::SCLOUD_CONFIG_ZONE_MISSING_FILE => { |
295 | 2 | "[SCLOUD_CONFIG] Zone file path is missing." |
296 | | } |
297 | | |
298 | | SCloudException::SCLOUD_CONFIG_SLAVE_MISSING_MASTERS => { |
299 | 2 | "[SCLOUD_CONFIG] Slave zone has no master servers defined." |
300 | | } |
301 | | |
302 | | SCloudException::SCLOUD_CONFIG_FORWARD_ZONE_MISSING_FORWARDERS => { |
303 | 2 | "[SCLOUD_CONFIG] Forward zone has no forwarders defined." |
304 | | } |
305 | | |
306 | | SCloudException::SCLOUD_CONFIG_INVALID_INLINE_ZONE => { |
307 | 2 | "[SCLOUD_CONFIG] Inline zone is invalid (missing records or SOA)." |
308 | | } |
309 | | |
310 | | SCloudException::SCLOUD_CONFIG_UNKNOWN_TSIG_KEY => { |
311 | 2 | "[SCLOUD_CONFIG] Referenced TSIG key does not exist." |
312 | | } |
313 | | |
314 | | SCloudException::SCLOUD_CONFIG_MX_MISSING_PRIORITY => { |
315 | 2 | "[SCLOUD_CONFIG] MX record is missing priority field." |
316 | | } |
317 | | |
318 | | SCloudException::SCLOUD_CONFIG_PRIORITY_ON_NON_MX => { |
319 | 2 | "[SCLOUD_CONFIG] Priority field is only allowed on MX records." |
320 | | } |
321 | | |
322 | | SCloudException::SCLOUD_CONFIG_INVALID_VIEW => { |
323 | 2 | "[SCLOUD_CONFIG] Invalid DNS view configuration." |
324 | | } |
325 | | |
326 | | SCloudException::SCLOUD_CONFIG_DUPLICATE_VIEW_NAME => { |
327 | 2 | "[SCLOUD_CONFIG] Duplicate view name detected." |
328 | | } |
329 | | |
330 | | SCloudException::SCLOUD_CONFIG_INVALID_DYNUPDATE => { |
331 | 2 | "[SCLOUD_CONFIG] Invalid dynamic update configuration." |
332 | | } |
333 | | |
334 | | SCloudException::SCLOUD_CONFIG_DYNUPDATE_UNKNOWN_ZONE => { |
335 | 2 | "[SCLOUD_CONFIG] Dynamic update references an unknown zone." |
336 | | } |
337 | 0 | _ => "[SCLOUD] Unknown error.", |
338 | | } |
339 | 130 | } |
340 | | } |